﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ListaTelefonicaMEM
{
    [Serializable]
    public static class lt
    {
        public static List<Contato> Contatos = new List<Contato>();
        public static List<Telefone> Telefones = new List<Telefone>();

        public static void AddContato(string prNome)
        {
            if (Contatos.FindIndex(p => p.Nome.ToUpper() == prNome.ToUpper()) < 0)
            {
                int cod = 1;
                if (Contatos.Count != 0)
                {
                    cod = Contatos.Max(p => p.Codigo) + 1;
                }

                Contato cont = new Contato();
                cont.Codigo = cod;
                cont.Nome = prNome;

                Contatos.Add(cont);
            }
        }

        public static int AddContatoRetornaIndice(string prNome)
        {
            int cod = 1;
            if (Contatos.FindIndex(p => p.Nome.ToUpper() == prNome.ToUpper()) < 0)
            {
                if (Contatos.Count != 0)
                {
                    cod = Contatos.Max(p => p.Codigo) + 1;
                }

                Contato emp = new Contato();
                emp.Codigo = cod;
                emp.Nome = prNome;

                Contatos.Add(emp);
            }
            else
            {
                cod = Contatos.Find(p => p.Nome.ToUpper() == prNome.ToUpper()).Codigo;
            }
            return cod;
        }

        public static void DeletarContato(int prIndice)
        {
            int i = Contatos.FindIndex(p => p.Codigo == prIndice);

            ExecuteDeleteContato(i);
        }

        public static void DeletarContato(string prNome)
        {
            int i = Contatos.FindIndex(p => p.Nome == prNome);

            ExecuteDeleteContato(i);
        }

        private static void ExecuteDeleteContato(int prIndex)
        {
            Telefones.RemoveAll(t => t.CodCont == Contatos[prIndex].Codigo);

            Contatos.RemoveAt(prIndex);
        }

        public static void AddTelefone(string prNumero, int prIndiceEmpresa)
        {
            int cod = 1;
            if (Telefones.Count != 0)
            {
                cod = Telefones.Max(t => t.Codigo) + 1;
            }

            Telefone tel = new Telefone();
            tel.Codigo = cod;
            tel.Numero = prNumero;
            tel.CodCont = prIndiceEmpresa;

            Telefones.Add(tel);
        }

        public static void DeletarTelefone(string prEmp, string prTelefone)
        {
            int iEmp = Contatos.FindIndex(p => p.Nome == prEmp);
            int indiceEmp = Contatos[iEmp].Codigo;

            int i = Telefones.FindIndex(t => t.Numero == prTelefone && t.CodCont == indiceEmp);

            Telefones.RemoveAt(i);
        }

        public static void DeletarEmpresasPorInicial(char prLetra)
        {
            foreach (Contato item in Contatos.Where(p => p.Nome[0] == prLetra).ToList())
            {
                DeletarContato(item.Codigo);
            }
        }


    }

    [Serializable]
    public class Contato
    {
        public int Codigo { get; set; }
        public string Nome { get; set; }
    }
    [Serializable]
    public class Telefone
    {
        public int Codigo { get; set; }
        public string DDD { get; set; }
        public string Numero { get; set; }
        public int CodCont { get; set; }
    }



}
